Conventional methods for backing up data from a computing system may be divided into two distinct approaches: file-by-file backups and block-by-block backups. In a file-by-file backup, each file in a file system is copied and backed up as a discrete file. For example, in a conventional file-by-file backup, each piece of data for a file, irrespective of the physical or logical location of the data within the file system that comprises the file, is copied into a single sequential block that is stored in a backup storage device.
Although a file-by-file backup preserves the file or directory structure of a file system, which allows individual files to be selectively accessed and restored, file-by-file backups fail to preserve the original physical or logical layout of the data comprising the files within the file system. In file systems, the actual physical blocks of data corresponding to each file are not generally stored in a contiguous or linear order. In practice, there is considerable physical discontinuity of recorded data blocks, both within individual files, and from file-to-file in a file system. Moreover, in many file systems the actual physical location of the blocks of data that comprise each file may be organized so as to optimize the performance of the file system. However, because file-by-file backups fail to preserve the preferred or optimized layout of the original file system, the performance of a file system that has been restored from a file-by-file backup may suffer.
A block-by-block backup, in contrast, preserves the original layout of a file system by copying and backing up data block-by-block without regard to the file or directory structure of the file system. For example, conventional block-by-block backups sequentially copy and backup each block of data in a file system in the physical order in which it is organized within the file system. However, because block-by-block backups fail to preserve the file and directory structure of the backed-up file system, it is difficult to mount and search block-by-block backups for individual files.
Incremental backups (which typically only backup data that has been changed since the last backup operation) are also performed with difficulty on a file system that is regularly defragmented using the block-by-block approach due to various impediments and inefficiencies. For example, even if linearly recorded at the outset, the blocks of data that comprise the files in a computing system may become fragmented as the data blocks are read, written, and edited during normal usage. This fragmentation may result in significant and inefficient disk-head repositioning during read and write operations. In an attempt to remedy this, a defragmentation operation may be performed to arrange the pieces of each file in the file system contiguously, or at least closer together, by changing the locations of data blocks. However, because the contents of many, if not the majority, of each data block in a file system may be changed during defragmentation (even if the actual files in the file system may not have changed), it is difficult and inefficient to attempt to perform an incremental backup of a file system that is regularly defragmented using the block-by-block approach.